from fastapi import FastAPI
from logs.logger.log_util import logger,tortoise_log
from contextlib import asynccontextmanager
from utils.common_util import worship
from app.database.basedb import init_database, init_db
from app.config.env import AppConfig
from core.sub_applications.handle import handle_sub_applications
from core.middlewares.handle import handle_middleware
from core.exceptions.handle import handle_exception
from modules.controller.dept_controller import deptController
import uvicorn


# 定义一个异步上下文管理器，用于管理应用的生命周期(启动和关闭时的操作)
@asynccontextmanager
async def lifespan(app: FastAPI):
    logger.info("================ start lifespan 开始启动 ==================")
    #  调用某种初始化或祭祀函数
    worship()

    #
    # async with init_database(app):
    #     yield print("================ init_database 数据库初始化完成 ==================")

    logger.info(f'================== {AppConfig.app_name} 启动成功 =================')
    # 使用 yield 表示启动完成，等待应用运行
    logger.info("================ end lifespan 结束运行 ==================")


app = FastAPI(
    debug=True,
    title="自定义fastapi 框架",
    description="自定义fastapi 框架",
    version="0.1.0",
    docs_url="/docs",
    redoc_url="/redoc"
)

# 注册数据库
# app.add_event_handler("startup", init_database(app))
init_db(app)

# 挂在子应用
handle_sub_applications(app)
# 加载中间件处理方法
handle_middleware(app)
# 加载全局异常处理方法
handle_exception(app)

# 加载路由表
controller_list = [
    {'router': deptController, 'tags': '系统管理-部门管理'}
]

for controller in controller_list:
    # 将路由添加到app中
    app.include_router(controller['router'], tags=[controller['tags']])

if __name__ == '__main__':
    uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True, workers=1)
